#ifndef _THREAD_H_
#define _THREAD_H_

class Thread
{
	public:
		void* programCounterAddress; //tells where the program is at.
		void* stackTopAddress; //tells where the top of the stack is
		//I want to use.
		unsigned char running; //tells if the thread is running
		virtual void run()=0; //runs the thread
		virtual void pause()=0; //pauses the thread
		virtual void halt()=0; //stops the thread from executing

		//this causes the current thread to wait on the Thread joiner
		//to finish executing
		virtual void join(Thread* joiner)=0; //

		//spawns a cloned instance of this thread running at the
		//same place
		virtual Thread* fork()=0;

		//resets the execution data of the thread to point to 
		//data that is in the new process.
		virtual Thread* exec(Process* p)=0; 
};


#endif
